#include <iostream>
#include <string>
using namespace std;
void swap(string &a, string &b)
{
	string temp=a;
	a=b;
	b=temp;
}
int qpartion(string p[],int start, int end)
{

	int i=start;
	int j=end;
	while (i<j)
	{
		while(i<j&&(strcmp(p[i].c_str(),p[j].c_str())<=0))
			j--;
		swap(p[i],p[j]);
		while(i<j&&(strcmp(p[i].c_str(),p[j].c_str())<=0))
		     i++;
		swap(p[i],p[j]);
	}
	return i;

}

void quicksort(string p[], int start, int end)
{

	int index=qpartion(p,start,end);
	if (start<end)
	{
		quicksort(p,start,index-1);
		quicksort(p,index+1,end);
	}

}
int comlen(const char* a,const char* b)
{
	int len=0;
	while (*a&&(*a++==*b++))
	len++;
	return len;

}
int main()
{
char a[]="abcdabcda";
int charnum=sizeof(a)/sizeof(a[0]);
string *newstr=new string[charnum-1];
int n=0;
while(a[n]!='\0')
{
	newstr[n]=&a[n];
	a[n]=a[n++];
}
quicksort(newstr,0,charnum-2);
//for (int i=0;i<charnum-1;i++)
//{
//	cout<<newstr[i]<<endl;
//}
int templen=0;
int maxindex=0;
int maxlen=0;
for (int i=0;i<charnum-2;i++)
{
	templen=comlen(newstr[i].c_str(),newstr[i+1].c_str());
	 if(templen>maxlen)
	{
		maxlen=templen;
		maxindex=i;
	}
}
cout<<newstr[maxindex]<<endl;

return 0;
}